package org.mbcorp.sar.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.mbcorp.sar.dao.UsuarioDAO;
import org.mbcorp.sar.model.Usuario;
import org.mbcorp.sar.service.UsuarioService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UsuarioServiceImpl implements UsuarioService {

	private static final Logger LOGGER = LoggerFactory
			.getLogger(UsuarioServiceImpl.class);

	@Resource
	private UsuarioDAO usuarioDAO;

	@Transactional
	@Override
	public Usuario grabar(Usuario created) {
		LOGGER.debug("Creando un nuevo usuario con informacion: " + created);

		return usuarioDAO.save(created);
	}

	@Override
	public Usuario eliminar(Integer usuarioId)
			throws RuntimeException {
		LOGGER.debug("Eliminando usuario con id: " + usuarioId);

		Usuario eliminado = usuarioDAO.findOne(usuarioId);

		if (eliminado == null) {
			LOGGER.debug("No se encontro usuario con id: " + usuarioId);
			throw new RuntimeException();
		}

		usuarioDAO.delete(eliminado);
		return eliminado;
	}

	@Transactional(readOnly = true)
	@Override
	public List<Usuario> buscarTodos() {
		LOGGER.debug("Buscando todos los usuarios");
		return usuarioDAO.findAll();
	}

	@Transactional(readOnly = true)
	@Override
	public Usuario buscarPorId(Integer id) {
		LOGGER.debug("Buscando usuario con id: " + id);
		return usuarioDAO.findOne(id);
	}

	@Transactional
	@Override
	public Usuario actualizar(Usuario actualizado)
			throws RuntimeException {
		LOGGER.debug("Actualizando usuario con informacion: " + actualizado);

		Usuario usuario = usuarioDAO.findOne(actualizado.getId());

		if (usuario == null) {
			LOGGER.debug("No se encontro usuario con id: "
					+ actualizado.getId());
			throw new RuntimeException();
		}

		return usuario;
	}

}
